import pandas as pd
import json
import os
from pathlib import Path

# 配置路径
input_dir = r""
# 文件名称
filenames = [""]


def excel_to_jsonl(input_path, output_path):
    """
    将 Excel 文件转换为 JSONL 格式

    参数:
    input_path - Excel 文件路径
    output_path - 输出的 JSONL 文件路径
    """
    try:
        # 读取 Excel 文件
        df = pd.read_excel(input_path, engine='openpyxl')
        print(f"成功读取: {input_path} → 记录数: {len(df)}")

        # 创建输出目录（如果不存在）
        output_dir = os.path.dirname(output_path)
        os.makedirs(output_dir, exist_ok=True)

        # 转换并保存为 JSONL
        with open(output_path, 'w', encoding='utf-8') as f:
            for _, row in df.iterrows():
                # 获取非空字段
                record = {
                    "id": row.get("id"),
                    "user_input": row.get("user_input"),
                    "reference": row.get("reference"),
                    "reference_content": row.get("reference_content"),
                    "response": row.get("response"),
                    "documents": row.get("documents"),
                    "retrieved_contexts": row.get("retrieved_contexts")
                }

                # 添加其他可能存在的字段
                for col in df.columns:
                    if col not in record and not pd.isna(row[col]) and row[col] != "":
                        record[col] = row[col]

                # 移除非空值字段
                clean_record = {k: v for k, v in record.items() if not pd.isna(v) and v != ""}

                # 写入 JSONL
                f.write(json.dumps(clean_record, ensure_ascii=False) + '\n')

        print(f"转换完成: {output_path} ✓")

    except Exception as e:
        print(f"处理文件 {input_path} 时出错: {str(e)}")


# 处理所有文件
for filename in filenames:
    # 构建输入文件路径
    input_path = os.path.join(input_dir, filename)

    if not os.path.exists(input_path):
        print(f"⚠️ 文件不存在: {input_path}")
        continue

    # 构建输出文件路径（相同目录，扩展名改为.jsonl）
    output_path = os.path.join(
        input_dir,
        Path(filename).stem + ".jsonl"
    )

    # 转换为JSONL
    excel_to_jsonl(input_path, output_path)

print("\n全部转换完成！")